
/*{
	type: 'Module',
	id: 'Core',
	constants: {
		'$Core': 'SocialAPI',
		'$Extend': '$Core.Extend'
	}
}*/

var $Core = {
	
	vesion: '0.1'

}

$Extend = function(parent, overrides)
{
	var Class = function()
	{
		if (Class.preparing)
		{
			return(delete(Class.preparing));
		}

		if (Class._constructor)
		{
			this.constructor = Class;
			Class._constructor.apply(this, arguments);
		}
	}
	
	Class.prototype = {};
	
	if (parent)
	{
		parent.preparing = true;
		Class.prototype = new parent;
		Class.prototype.constructor = parent;
		Class._constructor = parent;
	}
	
	if (overrides)
	{
		var name = 'constructor';
		
		for (var key in overrides)
		{
			if (key != name)
			{
				Class.prototype[key] = overrides[key];
			}
		}
		
		if (overrides[name] && overrides[name] != Object)
		{
			Class._constructor = overrides[name];
		}
	}
	
	return(Class);
}









try
{
	window.$Core = $Core;
}
catch(e)
{
	
}

/*{
	type: 'Test',
	id: 'Test',
	dependencies: ['Core']
}*/

$Core.dump = function(data)
{
	var log = '';
	
	log += data.constructor + '\n';
	for (var key in data)
	{
		log += key + ' = ' + data[key] + '\n';
	}
	
	console.log(log);
}

//var _Object1 = {
//	
//	_Function1: function ()
//	{
//		alert(1);
//	},
//	
//	_Array1: [1, 2, 3],
//	
//	_Object1: {a: 1, b: 2},
//	
//	_Number1: 4
//}
//
//var _Object2 = {
//	
//	_Function2: function ()
//	{
//		alert(2);
//	},
//	
//	_Array2: [1, 2, 3],
//	
//	_Object2: {a: 1, b: 2},
//	
//	_Number2: 4
//}
//
//var _Object3 = {
//	
//	_Function3: function ()
//	{
//		alert(3);
//	},
//	
//	_Array3: [1, 2, 3],
//	
//	_Object2: {a: 1, b: 2},
//	
//	_Number2: 5
//}
//
//var _Object4 = $Core.extend(_Object1, _Object2);
//
//_Object4._Number1 = 0;
//_Object4._Array1[0] = 0;
//
//$Core.dump(_Object1);
//$Core.dump(_Object2);
//$Core.dump(_Object3);
//$Core.dump(_Object4);


var _Function = function()
{
}

var _Overrides = {
	test: function()
	{
	//	console.log(1);
	}
}

var _Class = $Extend(_Function, _Overrides);

_test = new _Class();
_test.test();

/*{
	type: 'Namespace',
	id: 'ActionManager',
	dependencies: ['Core'],
	constants: {
		'$ActionManager': '$Core.ActionManager'
	},
	description: {
		ru: [
			'ActionManager - компонент, созданный для удобного управления действиями, которые можно совершать в виджете. С помощью этого компонента можно экспортировать и импортировать действия. Каждое действие является определенной функцией, вызвать которую пользователь может нажатием сочетания клавиш, кликом по элементу виджета и т.п.'
		].join('\n')
	}
}*/

$ActionManager = {
	
	handlers: {/*
		'Alert': function()
		{
			alert('Alert');
		}
	*/},
	
	actions: {/*
		'Alert': [{
					type: 'click',
					scope: 'Body'
				}, {
					type: 'shortcut',
					shortcut: 'Ctrl + Alt + Del',
					scope: 'Body'
			}]
	*/}
	
}

/*{
	type: 'Class',
	id: 'Action',
	dependencies: ['ActionManager'],
	constants: {
		'$Action': '$ActionManager.Action'
	}
}*/

$Action = function(config)
{
	config = config || {};
	this.config = config;
}

/*{
	type: 'Namespace',
	id: 'DOM',
	dependencies: ['Core'],
	constants: {
		'$DOM': '$Core.DOM'
	}
}*/

$DOM = {
	
}

/*{
	type: 'Namespace',
	id: 'UI',
	dependencies: ['Core'],
	constants: {
		'$UI': '$Core.UI',
	}
}*/

$UI = {

}

/*{
	type: 'Class',
	id: 'Component',
	dependencies: ['UI'],
	constants: {
		'$Component': '$UI.Component'
	}
}*/

$Component = function(config)
{
	config = config || {};
	this.config = config;
}

/*{
	type: 'Class',
	id: 'Container',
	dependencies: ['Component'],
	constants: {
		'$Container': '$UI.Container'
	}
}*/

$Container = $Extend($Component, {

});


/*{
	type: 'Test',
	dependencies: ['Container']
}*/

var _container = new $Container({
	width: 100,
	height: 300
});

console.log(_container.config.width);

/*{
	type: 'Class',
	id: 'Panel',
	dependencies: ['Container'],
	constants: {
		'$Panel': '$UI.Panel'
	}
}*/

$Panel = $Extend($Container, {
	

});

/*{
	type: 'Class',
	id: 'Viewport',
	dependencies: ['Container'],
	constants: {
		'$Viewport': '$UI.Viewport'
	}
}*/

$Viewport = $Extend($Container, {
	

});

/*{
	type: 'Test',
	dependencies: ['Viewport']
}*/

//var widget = new $Viewport({
//	id: 'Widget',
//	renderTo: document.body,
//	
//});